AWS SDK for Node.jsが知らない間に機能ふえてた件

AWS SDK for Node.jsが知らない間に機能ふえてた件

Clock Icon2013.02.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

aws-sdk-jsがpre5に

以前の記事で、AWS SDK for Node.jsの紹介記事がありました。
このときはまだpre1のときで、サポートしているサービスは、

  • S3
  • EC2
  • DynamoDB
  • SimpleWorkflow

だったとおもいます。
直近のプロジェクトで、Amazon SNSやSQSを使用する機会があったのですが、aws-sdk-jsが対応していなかったので、
node-awssumを使用したりしてました。

数日前、node-sdk-jsのサイトを確認したら、pre5にアップデートされており、対応するサービスも増えてました。
ここの下のほうにサポートしている サービスが載っていますが、SNSやSQSも追加されてますし、ElasticTranscoderやRedshiftといった新しめのサービスもサポートされています。
今回はAmazon SNSの動作を確認してみましょう。
※AWSアカウントは適当なものがあると仮定

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Node.js : v0.8.15
  • npm : 1.1.66

適当なディレクトリを作成し、そこでnpmを使用して必要なモジュールをインストールします。

% mkdir aws-node
% cd aws-node
% npm install aws-sdk

試しにAmazon SNSを使ってみる

AWSコンソールからテスト用データ登録

まずはテスト用のTopicを登録します。
Amazon SNSのAWS ConsoleからCreate New Topicボタンを押し、テスト用Topicを作成します。
そこで発行されたTopic ARNを覚えておきましょう。
次に登録したTopicを選択し、Create New Subscriptionボタンを押して、なんでもいいのでSubscription情報を登録します。
これらの情報は、この後のサンプルで情報を表示するだけなのでなんでもかまいません。また、確認が終わったら削除してしまいましょう。

aws-sdkを使ってSNS情報表示

まず、先ほど作成したディレクトリにconfigディレクトリを作成し、その中にaws.jsonという名前でAWSアカウント情報を記述します。

{
    "accessKeyId":"アクセスキー",
    "secretAccessKey":"シークレットキー",
    "region":"リージョン名"
}

そしてaws-test.jsという名前で下記ファイルを作成します。
先ほど登録したTopicとSubscriptionを取得し、コンソールに表示しています。

var arn = "先ほど登録したTopicのarn";

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config/aws.json');
var sns = new AWS.SNS();

sns.client.getTopicAttributes({'TopicArn':arn}, function (err, data) {
    console.log("topic:");
    console.log(data);
})
sns.client.listSubscriptionsByTopic({'TopicArn':arn}, function (err, data) {
    console.log("Subscriptions:");
    console.log(data);
});

使い方は他のサービスといっしょですね。
実行してみると、さっき登録したAmazon SNS情報が取得できました。
もちろん、subscribeやpublishのためのAPIも用意されています。

% node aws-test.js

まとめ

aws-sdk-jsはまだpreview版で、サポートされていないサービスもありますが、どんどんサポートする機能がふえてますね。
現状でも十分使用できる段階にあると思います。

参考サイトなど

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.